package com.lkd.http.controller;

import com.lkd.entity.TaskEntity;
import com.lkd.exception.LogicException;
import com.lkd.http.vo.*;
import com.lkd.service.*;
import com.lkd.vo.Pager;
import lombok.Getter;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.security.auth.login.LoginException;

@RestController
@RequestMapping("/task")
public class TaskController extends BaseController {
    @Autowired
    private TaskService taskService;

    /**
     * 创建工单
     *
     * @param taskViewModel
     * @return
     */
    @PostMapping("/create")
    public boolean create(@RequestBody TaskViewModel taskViewModel) throws LogicException {
        taskViewModel.setAssignorId(getUserId());
        return taskService.create(taskViewModel);
    }


    /**
     * 接受工单
     *
     * @param taskId
     * @return
     */
    @GetMapping("/accept/{taskId}")
    public boolean accept(@PathVariable String taskId) {
        Long id = Long.valueOf(taskId);
        //判断当前登录用户是否是工单的执行人，不是则抛出异常
        TaskEntity task = taskService.getById(id);
        if (!task.getUserId().equals(getUserId())) {
            throw new LogicException("操作非法");
        }
        return taskService.accept(id);
    }

    /**
     * 拒绝/取消工单
     *
     * @param taskId
     * @return
     */
    @PostMapping("/cancel/{taskId}")
    public boolean cancel(@PathVariable String taskId, @RequestBody CancelTaskViewModel cancelTaskViewModel) {
        Long id = Long.valueOf(taskId);
        //判断当前登录用户是否是工单的执行人
        TaskEntity task = taskService.getById(id);
        if (!task.getUserId().equals(getUserId())) {
            throw new LogicException("操作非法");
        }

        return taskService.cancel(id, cancelTaskViewModel);
    }


    /**
     * 完成工单
     * @param taskId
     * @return
     */
    @GetMapping("/complete/{taskId}")
    public boolean complete(@PathVariable String taskId){
        Long id = Long.valueOf(taskId);
        //判断当前登录用户是否是工单的执行人
        TaskEntity task = taskService.getById(id);
        if (!task.getUserId().equals(getUserId())) {
            throw new LogicException("操作非法");
        }

        return taskService.complete(id);
    }
    /**
     * 搜索工单
     * @param pageIndex
     * @param pageSize
     * @param innerCode 设备编号
     * @param userId  工单所属人Id
     * @param taskCode 工单编号
     * @param status 工单状态
     * @param isRepair 是否是维修工单
     * @return
     */
    @GetMapping("/search")
    public Pager<TaskEntity> search(
            @RequestParam(value = "pageIndex",required = false,defaultValue = "1") Long pageIndex,
            @RequestParam(value = "pageSize",required = false,defaultValue = "10") Long pageSize,
            @RequestParam(value = "innerCode",required = false,defaultValue = "") String innerCode,
            @RequestParam(value = "userId",required = false,defaultValue = "") Integer userId,
            @RequestParam(value = "taskCode",required = false,defaultValue = "") String taskCode,
            @RequestParam(value = "status",required = false,defaultValue = "") Integer status,
            @RequestParam(value = "isRepair",required = false,defaultValue = "") Boolean isRepair,
            @RequestParam(value = "start",required = false,defaultValue = "") String start,
            @RequestParam(value = "end",required = false,defaultValue = "") String end){
        return taskService.search(pageIndex,pageSize,innerCode,userId,taskCode,status,isRepair,start,end);
    }
}